package com.yhh.college_information_platform.service;

import com.yhh.college_information_platform.common.PageResult;
import com.yhh.college_information_platform.dto.*;
import com.yhh.college_information_platform.vo.LoginVO;
import com.yhh.college_information_platform.vo.UserVO;
import org.springframework.web.multipart.MultipartFile;

/**
 * 用户Service接口
 *
 * @author yhh
 * @date 2025-10-05
 */
public interface UserService {

    /**
     * 用户注册
     *
     * @param registerDTO 注册信息
     */
    void register(UserRegisterDTO registerDTO);

    /**
     * 用户登录
     *
     * @param loginDTO 登录信息
     * @return 登录结果（Token和用户信息）
     */
    LoginVO login(UserLoginDTO loginDTO);

    /**
     * 获取当前用户信息
     *
     * @param userId 用户ID
     * @return 用户信息
     */
    UserVO getUserInfo(Long userId);

    /**
     * 更新用户信息
     *
     * @param userId 用户ID
     * @param updateDTO 更新信息
     */
    void updateUserInfo(Long userId, UserUpdateDTO updateDTO);

    /**
     * 修改密码
     *
     * @param userId 用户ID
     * @param passwordDTO 密码信息
     */
    void updatePassword(Long userId, PasswordUpdateDTO passwordDTO);

    /**
     * 根据学号查询用户
     *
     * @param studentId 学号
     * @return 用户信息
     */
    UserVO getUserByStudentId(String studentId);

    /**
     * 上传头像
     *
     * @param userId 用户ID
     * @param file 头像文件
     * @return 头像URL
     */
    String uploadAvatar(Long userId, MultipartFile file);

    /**
     * 分页查询用户列表（管理员）
     *
     * @param queryDTO 查询条件
     * @return 分页结果
     */
    PageResult<UserVO> getUserPage(UserQueryDTO queryDTO);

    /**
     * 更新用户信息（管理员）
     *
     * @param userId 用户ID
     * @param updateDTO 更新信息
     * @param adminId 管理员ID
     */
    void updateUserByAdmin(Long userId, UserUpdateDTO updateDTO, Long adminId);

    /**
     * 删除用户（管理员）
     *
     * @param userId 用户ID
     * @param adminId 管理员ID
     */
    void deleteUserByAdmin(Long userId, Long adminId);

    /**
     * 重置用户密码（管理员）
     *
     * @param userId 用户ID
     * @param adminId 管理员ID
     * @return 新密码
     */
    String resetPassword(Long userId, Long adminId);
}
